/*
 * GameState.h
 *
 *  Created on: May 6, 2013
 *      Author: skipper
 */

#ifndef GAMESTATE_H_
#define GAMESTATE_H_
#include<iostream>
#include<string>
#include<list>
using namespace std;

class GameState
{
    public:
        GameState *parentState;
        GameState *childState1;
        GameState *childState2;
        GameState *childState3;
        GameState *childState4;
        GameState *childState5;
        GameState *childState6;
        static int capacityA;
        static int capacityB;
        int volumnA;
        int volumnB;
        bool extensible=true;
        string resultingOperation;
        static list<GameState> knownStates=new list<GameState>();

    public:
        GameState* getParentState();
        GameState* getChildState1();
        GameState* getChildState2();
        GameState* getChildState3();
        GameState* getChildState4();
        GameState* getChildState5();
        GameState* getChildState6();
        static int getCapacityA();
        static int getCapacityB();
        int getVolumnA();
        int getVolumnB();
        bool getExtensible();

        string getResultingOperation();
        void grow();
        static void updateKnownStates();
        static boolean isNewState(GameState gs);
        string getOpSeq();
        GameState();
        virtual
        ~GameState();
};

#endif /* GAMESTATE_H_ */
